import type MarkdownIt from "markdown-it";

export default (md: MarkdownIt): void => {
  md.renderer.rules.tooltip = (tokens, idx) => {
    const token = tokens[idx];

    return `<api-typing type="${token.content}" details="${token.info}" />`;
  };

  md.inline.ruler.before("emphasis", "tooltip", (state, silent) => {
    const tooltipRegExp = /^\^\[([^\]]*)\](`[^`]*`)?/;
    const str = state.src.slice(state.pos, state.posMax);

    if (!tooltipRegExp.test(str)) return false;
    if (silent) return true;

    const result = str.match(tooltipRegExp);

    if (!result) return false;

    const token = state.push("tooltip", "tooltip", 0);
    token.content = result[1].replace(/\\\|/g, "|");
    token.info = (result[2] || "").replace(/^`(.*)`$/, "$1");
    token.level = state.level;
    state.pos += result[0].length;

    return true;
  });
};
